package clases.personal;

import CapaDatos.DataSource;
import CapaDatos.Sql;
import global.Dialogos;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

public class Hijo extends Personal {

    private int idhijo;
    private String nombrehijo;
    private String apellidohijo;
    private String fechanacimientohijo;
    private String genero;
    private String sql;
    private DataSource dt;

    public Hijo() {
        dt = new DataSource();
    }

    public int getIdhijo() {
        return idhijo;
    }

    public void setIdhijo(int idhijo) {
        this.idhijo = idhijo;
    }

    public String getNombrehijo() {
        return nombrehijo;
    }

    public void setNombrehijo(String nombrehijo) {
        this.nombrehijo = nombrehijo;
    }

    public String getApellidohijo() {
        return apellidohijo;
    }

    public void setApellidohijo(String apellidohijo) {
        this.apellidohijo = apellidohijo;
    }

    public String getFechanacimientohijo() {
        return fechanacimientohijo;
    }

    public void setFechanacimientohijo(String fechanacimientohijo) {
        this.fechanacimientohijo = fechanacimientohijo;
    }

    public String getGenero() {
        return genero;
    }

    public void setGenero(String genero) {
        this.genero = genero;
    }

    private int getMax() {
        return Sql.getMax("IDHIJO", "HIJO", true);
    }

    private boolean ExistenciaHijo() {
        sql = "SELECT * FROM HIJO JOIN PERSONAL ON "
                + "HIJO.CEDULARUC=PERSONAL.CEDULARUC "
                + "WHERE PERSONAL.CEDULARUC='" + this.getCedulaRuc() + "' "
                + "AND APELLIDO='" + this.apellidohijo + "' "
                + "AND NOMBRE='" + this.nombrehijo + "'";
        return Sql.isExiste(sql);
    }

    public boolean GuardarHijo() {
        if (this.ExistenciaHijo() == true) {
            Dialogos.Error("Ya existe el hijo");
            return false;
        } else if (Sql.insertar("INSERT INTO HIJO VALUES(" + this.getMax() + ", "
                + "'" + this.getCedulaRuc() + "', '" + this.nombrehijo + "', "
                + "'" + this.apellidohijo + "', '"
                + this.fechanacimientohijo + "', '" + this.genero + "')") == true) {
            Dialogos.GuardadoconExito();
            return true;
        } else {
            Dialogos.Error("Error al guardar el Hijo");
            return false;
        }
    }

    public boolean actualizarHijo() {
        sql = "UPDATE HIJO SET CEDULARUC='" + this.getCedulaRuc() + "', "
                + "NOMBRE='" + this.nombrehijo + "', APELLIDO='" + this.apellidohijo + "', "
                + "FECHANACIMIENTO='" + this.fechanacimientohijo + "', "
                + "GENERO='" + this.genero + "' "
                + "WHERE IDHIJO='" + this.idhijo + "'";

        if (Sql.actualizar(sql) == true) {
            global.Mensajes.mostrarMensaje("Correcto!", "Datos actualizados correctamente", 1);
            return true;
        } else {
            Dialogos.Error("Error al actualizar el hijo");
            return false;
        }
    }

    public boolean EliminarHijo(String cedula, String hijo) {
        if (global.Mensajes.mostrarPregunta("¿Realmente desea eliminar el hijo?") == true) {
            Sql.eliminar("DELETE FROM HIJO WHERE CEDULARUC IN \n"
                    + "(SELECT PERSONAL.CEDULARUC FROM PERSONAL \n"
                    + "JOIN PERSONA ON PERSONA.CEDULARUC=PERSONAL.CEDULARUC \n"
                    + "WHERE PERSONAL.CEDULARUC='" + cedula + "')\n"
                    + "AND CONCAT(APELLIDO,' ',NOMBRE)='" + hijo + "'");
            return true;
        }

        return false;
    }

    public void sacarIdHijo() {
        sql = "SELECT IDHIJO FROM HIJO "
                + "WHERE CONCAT(APELLIDO,' ',NOMBRE)='" + this.apellidohijo + " " + this.nombrehijo + "'";
        System.out.println(sql);
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            this.idhijo = dt.getInt(1);
        }
    }

    public String SqlGeneralHijo() {
        sql = "SELECT PERSONAL.CEDULARUC, CONCAT(PERSONA.APELLIDO,' ',PERSONA.NOMBRE), "
                + "CONCAT(HIJO.APELLIDO,' ',HIJO.NOMBRE), "
                + "TO_CHAR(HIJO.FECHANACIMIENTO, 'DD-MM-yyyy'), HIJO.GENERO "
                + "FROM PERSONAL \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=PERSONAL.CEDULARUC \n"
                + "JOIN HIJO ON HIJO.CEDULARUC=PERSONAL.CEDULARUC";
        return sql;
    }

    public String SqlHijo(String hijo) {
        sql = "SELECT PERSONAL.CEDULARUC, CONCAT(PERSONA.APELLIDO,' ',PERSONA.NOMBRE), "
                + "CONCAT(HIJO.APELLIDO,' ',HIJO.NOMBRE), "
                + "TO_CHAR(HIJO.FECHANACIMIENTO, 'DD-MM-yyyy'), HIJO.GENERO "
                + "FROM PERSONAL \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=PERSONAL.CEDULARUC \n"
                + "JOIN HIJO ON HIJO.CEDULARUC=PERSONAL.CEDULARUC "
                + "WHERE CONCAT(HIJO.APELLIDO,' ',HIJO.NOMBRE) LIKE ('" + hijo + "%')";
        return sql;
    }
    
    public String SqlHijoFecha(String fecha) {
        sql = "SELECT PERSONAL.CEDULARUC, CONCAT(PERSONA.APELLIDO,' ',PERSONA.NOMBRE), "
                + "CONCAT(HIJO.APELLIDO,' ',HIJO.NOMBRE), "
                + "TO_CHAR(HIJO.FECHANACIMIENTO, 'DD-MM-yyyy'), HIJO.GENERO "
                + "FROM PERSONAL \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=PERSONAL.CEDULARUC \n"
                + "JOIN HIJO ON HIJO.CEDULARUC=PERSONAL.CEDULARUC "
                + "WHERE TO_CHAR(HIJO.FECHANACIMIENTO, 'DD-MM-yyyy')='" + fecha + "'";
        return sql;
    }

    public String SqlHijoPersonal(String personal) {
        sql = "SELECT PERSONAL.CEDULARUC, CONCAT(PERSONA.APELLIDO,' ',PERSONA.NOMBRE), "
                + "CONCAT(HIJO.APELLIDO,' ',HIJO.NOMBRE), "
                + "TO_CHAR(HIJO.FECHANACIMIENTO, 'DD-MM-yyyy'), HIJO.GENERO "
                + "FROM PERSONAL \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=PERSONAL.CEDULARUC \n"
                + "JOIN HIJO ON HIJO.CEDULARUC=PERSONAL.CEDULARUC "
                + "WHERE CONCAT(PERSONA.APELLIDO,' ',PERSONA.NOMBRE) LIKE ('" + personal + "%')";
        return sql;
    }

    public String SqlHijoGenero(String genero) {
        sql = "SELECT PERSONAL.CEDULARUC, CONCAT(PERSONA.APELLIDO,' ',PERSONA.NOMBRE), "
                + "CONCAT(HIJO.APELLIDO,' ',HIJO.NOMBRE), "
                + "TO_CHAR(HIJO.FECHANACIMIENTO, 'DD-MM-yyyy'), HIJO.GENERO "
                + "FROM PERSONAL \n"
                + "JOIN PERSONA ON PERSONA.CEDULARUC=PERSONAL.CEDULARUC \n"
                + "JOIN HIJO ON HIJO.CEDUgeLARUC=PERSONAL.CEDULARUC "
                + "WHERE HIJO.GENERO ='" + genero + "'";
        return sql;

    }

    public void ConsultaHijo(DefaultTableModel modelo, JTable tabla, String sql, JLabel Lpaginatotal, JLabel Lpagina, int pagina) {
        modelo = new DefaultTableModel() {
            @Override
            public boolean isCellEditable(int fila, int columna) {
                return false;
            }
        };
        tabla.setModel(modelo);
        modelo.addColumn("CEDULA");
        modelo.addColumn("PERSONAL");
        modelo.addColumn("HIJO");
        modelo.addColumn("FECHA NACIMIENTO");
        modelo.addColumn("EDAD");
        modelo.addColumn("GENERO");
        TableColumn columna = new TableColumn();
        columna = tabla.getColumnModel().getColumn(0);
        columna.setPreferredWidth(80);
        columna = tabla.getColumnModel().getColumn(1);
        columna.setPreferredWidth(200);
        columna = tabla.getColumnModel().getColumn(2);
        columna.setPreferredWidth(200);
        columna = tabla.getColumnModel().getColumn(3);
        columna.setPreferredWidth(80);
        columna = tabla.getColumnModel().getColumn(4);
        columna.setPreferredWidth(40);
        columna = tabla.getColumnModel().getColumn(5);
        columna.setPreferredWidth(80);
        sql = objPaginacion.getPaginacion(sql, pagina, 25);
        Sql.getConsulta(sql, dt);

        String[] fila;

        while (dt.next()) {
            fila = new String[6];
            fila[0] = dt.getString(1);
            fila[1] = dt.getString(2);
            fila[2] = dt.getString(3);
            fila[3] = dt.getString(4);
            fila[4] = Integer.toString(global.Conversiones.calcularEdad(dt.getString(4)));
            fila[5] = dt.getString(5);

            modelo.addRow(fila);

        }
        objPaginacion.actualPagina(Lpagina);
        objPaginacion.totalPaginas(Lpaginatotal);
        tabla.getSelectionModel().setSelectionInterval(0, 0);
    }

    public void llenardatosHijo(String cedula, String hijo) {
        sql = "SELECT HIJO.NOMBRE, HIJO.APELLIDO, \n"
                + "TO_CHAR(HIJO.FECHANACIMIENTO, 'DD/MM/yyyy'), "
                + "HIJO.GENERO FROM HIJO JOIN PERSONAL "
                + "ON HIJO.CEDULARUC=PERSONAL.CEDULARUC "
                + "WHERE HIJO.CEDULARUC='" + cedula + "' "
                + "AND CONCAT(HIJO.APELLIDO,' ',HIJO.NOMBRE)='" + hijo + "'";
        Sql.getConsulta(sql, dt);
        while (dt.next()) {
            this.nombrehijo = dt.getString(1);
            this.apellidohijo = dt.getString(2);
            this.fechanacimientohijo = dt.getString(3);
            this.genero = dt.getString(4);
        }
    }
}
